package com.example.controller;

// 导入所需的类和接口
import com.example.common.Result; // 封装响应结果的类
import com.example.entity.Admin; // 管理员实体类
import com.example.service.AdminService; // 管理员服务接口
import com.github.pagehelper.PageInfo; // 分页信息类
import cn.hutool.core.util.StrUtil; // 字符串工具类
import jakarta.annotation.Resource; // 依赖注入注解（注意：这里使用的是Jakarta EE的注解，而不是Java EE的）
import org.springframework.web.bind.annotation.*; // Spring MVC注解

import java.util.List; // 列表接口

// @RestController注解表示这是一个控制器，并且所有的方法返回值都会直接作为HTTP响应体返回
// @RequestMapping("/admin")定义了这个控制器处理请求的根路径
@RestController
@RequestMapping("/admin")
public class AdminController {

    // 通过@Resource注解依赖注入AdminService，用于处理业务逻辑
    @Resource
    private AdminService adminService;

    // 新增管理员
    @PostMapping("/add")
    public Result add(@RequestBody Admin admin) {
        // 如果管理员头像为空，则设置默认头像
        if(StrUtil.isBlank(admin.getAvatar())) {
            admin.setAvatar("http://localhost:9090/files/avatar.png");
        }
        // 调用服务层方法新增管理员
        adminService.add(admin);
        // 返回成功结果
        return Result.success();
    }

    // 删除管理员
    @DeleteMapping("/delete/{id}")
    public Result deleteById(@PathVariable Integer id) {
        // 调用服务层方法根据ID删除管理员
        adminService.deleteById(id);
        // 返回成功结果
        return Result.success();
    }

    // 修改管理员
    @PutMapping("/update")
    public Result updateById(@RequestBody Admin admin) {
        // 调用服务层方法根据管理员对象更新管理员（通常是根据ID）
        adminService.updateById(admin);
        // 返回成功结果
        return Result.success();
    }

    // 根据ID查询管理员
    @GetMapping("/selectById/{id}")
    public Result selectById(@PathVariable Integer id) {
        // 调用服务层方法根据ID查询管理员
        Admin admin = adminService.selectById(id);
        // 返回成功结果，并携带管理员对象
        return Result.success(admin);
    }

    // 根据ID查询管理员（param形式
    @GetMapping("/selectOne")
    public Result selectOne(@RequestParam Integer id, @RequestParam(required = false) String no) {
        // 尽管有no参数，但这里并没有使用它，可能是遗留代码或预留接口
        // 调用服务层方法根据ID查询管理员
        Admin admin = adminService.selectById(id);
        // 返回成功结果，并携带管理员对象
        return Result.success(admin);
    }

    // 查询所有管理员
    @GetMapping("/selectAll")
    public Result selectAll(Admin admin) {

        // 调用服务层方法查询所有管理员（可能带有条件）
        List<Admin> list = adminService.selectAll(admin);
        // 返回成功结果，并携带管理员列表
        return Result.success(list);
    }

    // 分页查询管理员
    @GetMapping("/selectPage")
    public Result selectPage(Admin admin,
                             @RequestParam(defaultValue = "1") Integer pageNum,
                             @RequestParam(defaultValue = "10") Integer pageSize) {
        // 调用服务层方法进行分页查询，pageNum是当前页码，pageSize是每页显示的个数
        PageInfo<Admin> page = adminService.selectPage(admin, pageNum, pageSize);
        // 返回成功结果，并携带分页信息（包括管理员列表）
        return Result.success(page);
    }

}